import axios from 'axios'
import store from '../utils/store'

axios.defaults.baseURL = process.env.BASE_API

/**
 * 功能描述：Http Request 拦截器
 */

axios.interceptors.request.use((config) => {
  if (store.state.token) { // 判断token是否存在
    config.headers.token = store.state.token // 将token设置成请求头
  }
  return config
}, (error) => {
  console.log(`请求参数错误`)
  return Promise.reject(error)
})

/**
 * 功能描述：Http Response 拦截器
 */
axios.interceptors.response.use((res) => {
  let isTips = res.config.showMessage === undefined || res.config.showMessage === true

  if (res.status !== 200) {
    isTips && console.log(`请求异常：${res.message}`)
    return Promise.reject(res)
  } else {
    if (res.data.code === 202) {
      wx.showModal({
        title: 'error',
        content: 'token已过期',
        showCancel: false,
        confirmText: '重新登录',
        success (res) {
          if (res.confirm) {
            console.log('用户点击确定')
            wx.redirectTo({
              url: '../login/main'
            })
          }
        }
      })
    } else if (res.data.code !== 200) {
      isTips && console.log(`服务器返回异常：${res.data.message}`)
      return Promise.reject(res)
    } else {

    }
    //  if (res.data.data.token !== null && res.data.data.token !== undefined) {
    //   store.commit('changeToken', res.data.data.token)
    //   console.log('token更新')
    // }
    return Promise.resolve(res.data)
  }
}, (error) => {
  // wx.showToast({
  //   title: error.data.message,
  //   icon: 'loading', // 图标，支持"success"、"loading"
  //   // image: '/images/tan.png', // 自定义图标的本地路径，image 的优先级高于 icon
  //   duration: 2000, // 提示的延迟时间，单位毫秒，默认：1500
  //   mask: false, // 是否显示透明蒙层，防止触摸穿透，默认：false
  //   success: function () {},
  //   fail: function () {},
  //   complete: function () {}
  // })
  console.log(`服务器返回异常：${error}`)
  return Promise.reject(error)
})

export default {
  get (url, params, config) {
    let configObj = {}
    if (config !== undefined) {
      Object.assign(configObj, config)
    }
    if (params !== undefined) {
      configObj['params'] = params
    }
    return axios.get(url, configObj)
  },
  delete (url, params, config) {
    let configObj = {}
    if (config !== undefined) {
      Object.assign(configObj, config)
    }
    if (params !== undefined) {
      configObj['params'] = params
    }
    return axios.delete(url, configObj)
  },
  post (url, data, config) {
    return axios.post(url, data, config)
  },
  put (url, data, config) {
    return axios.put(url, data, config)
  },
  patch (url, data, config) {
    return axios.patch(url, data, config)
  }
}
